<?php
App::uses('AppModel', 'Model');

class Livro extends AppModel {

	public $primaryKey = 'id_livros';

	public $displayField = 'titulo';

	public $validate = array(
		'id_livros' => array(
			'numeric' => array(
				'rule' => array('numeric'),
			),
		),
		'autor' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'titulo' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'volume' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'editora' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'local' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'ano' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'exemplar' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'assunto1' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'assunto2' => array(
			'notempty' => array(
				'rule' => array('numeric'),
				'message' => 'Entrada inválida',
				'allowEmpty' => true
			),
		),
		'codigo' => array(
			'unico' => array(
				'rule' => 'unicoCodigo',
				'message' => 'Esse código já existe para um livro ativo',

			),
		),
		'status' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
		'sai' => array(
			'notempty' => array(
				'rule' => array('notempty'),
				'message' => 'Não pode ser vazio',
			),
		),
	);


	public $belongsTo = array(
		'Assunto1' => array(
			'className' => 'Assunto',
			'foreignKey' => 'assunto1',
		),
		'Assunto2' => array(
			'className' => 'Assunto',
			'foreignKey' => 'assunto2',
		),
		'Editora' => array(
			'className' => 'Editora',
			'foreignKey' => 'editora_id',
		),
	);
	
	public $hasMany = array(
		'Emprestimos' => array(			
            'className'     => 'Emprestimo',
            'foreignKey'    => 'livros_id',
		),
		'Resenhas' => array(
			'className'=> 'Resenha',
			'foreignKey' => 'livros_id',
			'conditions' => array('aprovada' => 1)
		)
	);
	
	public function unicoCodigo($data){
		$livro = $this->findAllByCodigoAndAssunto1AndStatus($this->data['Livro']['codigo'],
				$this->data['Livro']['assunto1'],
				1);
		if(!$livro){
			return true;
		}
		if($livro[0]['Livro']['id_livros'] == $this->data['Livro']['id_livros'])
			return true;
	}
	
	public function formataCodigo($codigo){
		$return['tipo'] = $codigo[0];
		$return['codigo'] = substr($codigo, 1, 7);
		$return['exemplar'] = substr($codigo, 8);
		
		return $return;
	}
	
	public function buscaLivroPorCodigoParaEmprestimo($codigo){
		$assunto = $this->Assunto1->assuntoByCodigo($codigo);
		$finalCodigo = substr($codigo, 4);
		$dados = $this->find('first', array(
										'conditions'=>array('assunto1'=>$assunto['Assunto1']['id_assuntos'],
															'codigo'=>$finalCodigo,
															'status'=>1)));
		return $dados['Livro']['id_livros'];
	}
	
	public function numeroExemplares($id){
		$livro = $this->findByIdLivros($id);
		return $livro['Livro']['exemplar'];
	}
	
	public function exemplaresDisponivel($id){
		$numLivrosEmprestados = $this->Emprestimos->find('count', array('conditions'=>array('livros_id'=>$id)));
		$exemplares = $this->numeroExemplares($id);
		if($exemplares - $numLivrosEmprestados <= 0)
			return false;
		return true;
	}
	
	public function visualizacao($valor){
		$this->Assunto1->visualizacao($this->data['Assunto1']['id_assuntos'], $this->data['Assunto1']['visualizacoes']);
		$this->save(array('visualizacoes'=>$valor+1));
	}
	
	public function emprestimo($livro){
		$this->read(null, $livro['id_livros']);
		$this->save(array('emprestimos'=>$livro['emprestimos']+1));
	}
	
	public function normalizacodigo($codigo){
		$digitos = strlen($codigo);
		for($i = 0;$i + $digitos < 3;$i++){
			$codigo = '0'.$codigo;
		}
		return $codigo;
	}
	
	public function novoCodigo($assunto){
		$codigos = $this->findAllByAssunto1($assunto, array('codigo'), array('codigo ASC'));
		$i = 1;
		foreach ($codigos as $item){
			//echo $item['Livro']['codigo'] .'-'. $i.'<BR>';
			if($item['Livro']['codigo'] != $i){ // Se são diferentes, retorna $i
				//echo 'Achou espaço!<BR>';
				return $this->normalizacodigo($i);
			}
			$i++;
		}
		// Se chegou aqui, não tem espaço vazio
		return $this->normalizacodigo($i);
		
	}
}
